
import java.io.Serializable;
import java.util.ArrayList;

public class BeanSubCategoria implements Serializable {

    private int ID;
    private String nome;
    private int categoria_pai;
    private BeanSubCategoria pai;

    public BeanSubCategoria() {
    }
    
    public BeanSubCategoria(int ID) throws Exception {
        DAOSubCategoria banco = new DAOSubCategoria();
        BeanSubCategoria retorno = banco.RetornaCategoria(ID);
        this.ID = ID;
        this.nome = retorno.getNome();
        this.categoria_pai = retorno.getCategoria_pai();
    }

    public ArrayList<BeanSubCategoria> Listar() throws Exception {
        DAOSubCategoria banco = new DAOSubCategoria();
        return banco.RetornaCategorias();
    }

    public ArrayList<BeanSubCategoria> Listar(int categoria_pai) throws Exception {
        DAOSubCategoria banco = new DAOSubCategoria();
        return banco.ListaPorCategoriaPai(categoria_pai);
    }

    public void Salvar(int ID, String nome, int categoria_pai) throws Exception {
        this.ID = ID;
        this.nome = nome;
        this.categoria_pai = categoria_pai;
        this.Salvar(this);
    }

    public void Salvar(BeanSubCategoria categoria) throws Exception {
        DAOSubCategoria banco = new DAOSubCategoria();
        if (categoria.getID() != 0 && null != banco.RetornaCategoria(categoria.getID())) {
            banco.Atualiza(categoria);
        } else {
            banco.Insere(categoria);
        }
    }

    public void Deleta(BeanSubCategoria categoria) throws Exception {
        DAOSubCategoria banco = new DAOSubCategoria();
        for (BeanSubCategoria sub : banco.ListaPorCategoriaPai(categoria.getID())) {
            banco.Deleta(sub);
        }
        banco.Deleta(categoria);
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getCategoria_pai() {
        return categoria_pai;
    }

    public void setCategoria_pai(int categoria_pai) {
        this.categoria_pai = categoria_pai;
    }

    public BeanSubCategoria getPai() throws Exception {
        if (pai == null)
            pai = new BeanSubCategoria(this.categoria_pai);
        return pai;
    }

    public void setPai(BeanSubCategoria pai) {
        this.categoria_pai = pai.getCategoria_pai();
        this.pai = pai;
    }
}
